iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
自我挑戰組

Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱系列 第 9

【Day 09】【Tool 1 實作】BMI 與 BMR 數學計算邏輯:JS 算術運算子與 toFixed() 數值格式化

  • 分享至 

  • xImage
  •  

本篇文章目錄

  1. 前言:從數據驗證到核心演算
  2. 核心公式與 JS 算術運算子
  3. 實戰程式碼:Mifflin-St Jeor 公式與 TDEE 邏輯撰寫
  4. 數值格式化:為什麼你需要 toFixed()
  5. 結語

一、 前言:從數據驗證到核心演算

在 Day 08 中,我們成功建構了表單驗證機制,確保輸入的身高、體重與年齡皆為有效的數字。

今天 [Day 09] 的任務,就是將這些乾淨的數據帶入 BMI、BMR 與 TDEE 的數學公式 中。我們會運用 JavaScript 的算術運算子進行精準計算,並使用 toFixed() 解決浮點數小數點過長的問題,將數據整理成易於閱讀的格式!

二、 核心公式與 JS 算術運算子

在 JS 中進行數學運算時,我們會用到以下基礎算術運算子:

  • + / - / * / /:加、減、乘、除。
  • **(指數運算子):例如 1.65² 可以寫成 1.65 ** 2(或使用 Math.pow(1.65, 2))。

算式定義:

  1. BMI = 體重 (Kg) ÷ 身高² (m²)
    • 注意:輸入框抓到的身高是公分 (cm),計算時必須先除以 100 換算為公尺 (m)
  2. BMR (Mifflin-St Jeor 公式)
    男性:BMR = 10 × 體重(kg) + 6.25 × 身高(cm) - 5 × 年齡(歲) + 5
    女性:BMR = 10 × 體重(kg) + 6.25 × 身高(cm) - 5 × 年齡(歲) - 161
  3. TDEE = 基礎代謝率(BMR)× 活動量係數

三、 實戰程式碼:BMI、BMR 與 TDEE 核心算式

接續 Day 08 通過驗證後的程式碼區塊,我們將核心邏輯補全:

/tool1-calculator.js
https://ithelp.ithome.com.tw/upload/images/20260922/20184266bWfuvfzwEd.png

四、 數值格式化:為什麼你需要 toFixed()

在 JavaScript 中,直接進行浮點數除法常會產生極長的小數,例如 22.49134948096886。如果直接渲染到畫面上,會破壞卡片的美觀,也會讓使用者感到困惑。

1. toFixed(n) 的用法與陷阱

number.toFixed(n) 能將數字轉為指定小數點位數的字串

const rawBmi = 22.4913;
console.log(rawBmi.toFixed(1)); // 輸出:"22.5" ( 型態變成了 String )

提醒toFixed() 回傳的是字串 (String) 而非數字!如果你後續還需要拿這個結果進行加減運算,記得用 parseFloat(bmi.toFixed(1)) 將它轉回數字,否則會發生 "22.5" + 5 = "22.55" 的字串串接。

2. 熱量數值的處理:Math.round()

對於 BMR 與 TDEE 這類卡路里數值,一般日常評估不需要小數點。使用 Math.round() 進行四捨五入取整數,可以讓數據在視覺上看起來更直覺、更乾淨。

五、 結語

今天我們成功完成 [Tool 1] 最核心的數學計算與數值格式化!我們學會了如何正確換算單位、運用條件判斷區分男女 BMR 公式,並使用 toFixed()Math.round() 整理出漂亮的數據輸出。


上一篇
【Day 08】【JS 語法】[Tool 1] DOM 操作基礎:document.querySelector 取值與 addEventListener 觸發
下一篇
【Day 10】【Tool 1 實作】TDEE 活動量換算邏輯:switch...case 觀念演練
系列文
Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言